Skip to main content

Prisma CRUD 작업 가이드

작성일 : 2024.12.23

1. Create (생성)​

단일 레코드 생성​

const user = await prisma.user.create({
  data: {
    email: "user@example.com",
    name: "홍길동",
    posts: {
      create: {
        title: "첫 게시글",
      },
    },
  },
});

다중 레코드 생성​

const users = await prisma.user.createMany({
  data: [{ email: "user1@example.com" }, { email: "user2@example.com" }],
  skipDuplicates: true,
});

2. Read (조회)​

단일 레코드 조회​

const user = await prisma.user.findUnique({
  where: { id: 1 },
});

다중 레코드 조회​

const users = await prisma.user.findMany({
  where: {
    email: { contains: "@example.com" },
  },
  orderBy: { createdAt: "desc" },
  take: 10,
  skip: 0,
});

조건부 조회​

const users = await prisma.user.findMany({
  where: {
    OR: [{ email: { contains: "test" } }, { name: { contains: "홍" } }],
  },
});

관계 포함 조회​

const userWithPosts = await prisma.user.findUnique({
  where: { id: 1 },
  include: {
    posts: true,
    profile: true,
  },
});

3. Update (수정)​

단일 레코드 수정​

const user = await prisma.user.update({
  where: { id: 1 },
  data: { name: "새이름" },
});

다중 레코드 수정​

const users = await prisma.user.updateMany({
  where: { role: "USER" },
  data: { verified: true },
});

Upsert (생성 또는 수정)​

const user = await prisma.user.upsert({
  where: { email: "user@example.com" },
  create: { email: "user@example.com", name: "새사용자" },
  update: { name: "업데이트된이름" },
});

4. Delete (삭제)​

단일 레코드 삭제​

const user = await prisma.user.delete({
  where: { id: 1 },
});

다중 레코드 삭제​

const users = await prisma.user.deleteMany({
  where: {
    email: { contains: "@test.com" },
  },
});

연관 레코드 삭제 (트랜잭션)​

const [posts, user] = await prisma.$transaction([
  prisma.post.deleteMany({ where: { authorId: 1 } }),
  prisma.user.delete({ where: { id: 1 } }),
]);

5. 고급 쿼리 기능​

선택적 필드 조회​

const user = await prisma.user.findUnique({
  where: { id: 1 },
  select: {
    id: true,
    name: true,
    posts: {
      select: {
        title: true,
      },
    },
  },
});

집계 함수​

const stats = await prisma.user.aggregate({
  _count: { id: true },
  _avg: { age: true },
  where: { role: "USER" },
});

그룹화​

const grouped = await prisma.post.groupBy({
  by: ["authorId"],
  _count: { id: true },
  having: {
    id: { _count: { gt: 10 } },
  },
});

중첩 관계 쿼리​

const user = await prisma.user.findUnique({
  where: { id: 1 },
  include: {
    posts: {
      include: {
        comments: {
          include: {
            author: true,
          },
        },
      },
    },
  },
});